package com.readword.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.apache.poi.xwpf.usermodel.XWPFPicture;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @ClassName: Cons
* @Description: 定义系统的一些参数跟小工具
* @author 码农小鹿
* @date 2024年1月10日 下午1:43:02
*
 */
public interface Cons {
	final static Logger logger = LoggerFactory.getLogger(Cons.class);
	
	/**
	 * 定义word文档获取数据的关键词，可以自由设置word试卷关键词进行数据提取
	 */
	public static class KEYWORD {
		public final static String TOPIC =      "【题目】";
		public final static String PICTURE =    "【图片】";
		public final static String OPTION =     "【选项】";
		public final static String ANSWER =     "【答案】";
		public final static String ANALYSIS =   "【解析】";
		public final static String EXAMSITE =   "【考点】";
		public final static String SOURCE =     "【来源】";
		public final static String ERRORPRONE = "【易错项】";
		public final static String TOPICITEM =  "【题目子项】";
		
		public static String getStr(String key) {
			return key.replaceAll("【", "").replaceAll("】", "");
		}
		
	}

	/**
	 * 用于将题目字符串解析成可视化的题目数据的正则表达式
	 * 这个【】的顺序是按照模板的顺序来写的，所以不能随便更换，
	 * 如果模板进行改变，那么这里也要进行调整
	 */
	public final static String TOPIC = "【题目】(.*)【选项】(.*)【答案】(.*)【解析】(.*)【考点】(.*)【来源】(.*)【易错项】(.*)";
	/**
	 * 用于将题目字符串解析后的选项字符串解析成选项可视化正则表达式
	 */
	public final static String ITEM_REGEX = "([A-D])\\s*";
	/**
	 * 用于替换图片位置，然后切割的关键词
	 */
	public final static String SPLIT_IMG = "【img】";
	
	public static class TEXTORIMG {
		public final static String TEXTLIST = "textList";
		public final static String IMGLIST = "imgList";
	}
	/**
	 * 定义文件的保存目录路径与文件读取请求
	 */
	public static class FILE {
		/**
		 * 定义文件存储目录
		 */
		public final static String SAVEFOLDER = "D:\\read_word_img_file\\";
		public final static String SHOWFILE = "http://127.0.0.1:9090/file?name=";
		public final static String FILECHECK = "FILECHECK";
		public final static String IMGSUFFIX = ".png";
		
	}
	
	/**
	 * 系统工具类
	 */
	public static class TOOLS {
		/**
		 * 定义选项的点的方式，这个可要可不要
		 */
		public static List<String> getPoin() {
			List<String> poin = new ArrayList<String>();
			poin.add("、");
			poin.add(".");
			return poin;
		}
		public static List<String> getABCD() {
			List<String> poin = new ArrayList<String>();
			poin.add("A.");
			poin.add("B.");
			poin.add("C.");
			poin.add("D.");
			return poin;
		}
		/**
		 * 移除字符串的空格
		 */
		public static String removeTrim(String str) {
			return str.replaceAll("^\\s+|\\s+$", "");
		}
		/**
		 * 保存从word中读取的图片
		 */
		public static String saveFile(XWPFPicture pic) {
			String fname = getRandom();
			XWPFPictureData picData = pic.getPictureData();
			byte[] img = picData.getData();
			FileOutputStream fos;
			try {
				File fold = new File(Cons.FILE.SAVEFOLDER);
				if(!fold.exists()) {
					fold.mkdirs();
				}
				fos = new FileOutputStream(Cons.FILE.SAVEFOLDER + fname + Cons.FILE.IMGSUFFIX);
				fos.write(img);
				fos.close();
				return fname;
			} catch (FileNotFoundException e) {
				logger.error("保存图片路径异常：{}", e);
				return null;
			} catch (IOException e) {
				logger.error("保存图片异常：{}", e);
				return null;
			}
		}
		/**
		 * 生成uuid随机数
		 */
		public static String getRandom() {
			return UUID.randomUUID().toString().replaceAll("-", "");
		}
		
		/**
		 * 为了防止显示null，所以这里多做了一步，转成""
		 */
		public static String ifNull(String str) {
			if(null == str) {
				return "";
			}
			return str;
		}
	}
}
